home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / win / general / cdbw.exe / SAMPLE.C < prev    next >
Text File  |  1991-09-09  |  10KB  |  343 lines

  1. /*
  2.  *  SAMPLE.C
  3.  *
  4.  *  This module contains the WinMain, WndProc, and initialization functions
  5.  *  for SAMPLE.EXE
  6.  *
  7.  *  Copyright (C) 1991 by Daytris.  All rights reserved.
  8.  */
  9.  
  10. #include <windows.h>
  11. #include <stdio.h>
  12. #include "dbmgr.h"
  13. #include "sampledb.h"
  14. #include "sample.h"
  15.  
  16.  
  17. /************************************************
  18.  * Function Declarations
  19.  ************************************************/
  20.  
  21. int PASCAL WinMain( HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine,
  22.     int nCmdShow);
  23. BOOL InitApplication( HANDLE hInstance);
  24. HWND InitInstance( HANDLE hInstance, short nCmdShow);
  25. static BOOL InitDatabase( HWND hParentWnd);
  26. long FAR PASCAL WndProc( HWND hWnd, unsigned uMessage, WORD wParam,
  27.     LONG lParam);
  28. static void InitMainWindow( HWND hWnd);
  29.  
  30.  
  31. /************************************************
  32.  * Local Data
  33.  ************************************************/
  34.  
  35. static char szAppName[] = "Sample";         /* Class name */
  36.  
  37.  
  38. /************************************************
  39.  * Global Data
  40.  ************************************************/
  41.  
  42. HANDLE hInst;                               /* Instance handle */
  43. HANDLE hDb;                                 /* Database handle */
  44. HWND hWndClientLB;                          /* Client listbox handle */
  45. SETUP setup;                                /* Setup record */
  46. BOOL bSortByNumber = TRUE;                  /* Client listbox sort seq */
  47.  
  48.  
  49. /***************************************************************************
  50.  * Function : WinMain
  51.  *
  52.  * Purpose  : This function is the entry function for SAMPLE.EXE.
  53.  *
  54.  * Returns  : FALSE - error in initialization
  55.  *            MSG.wParam
  56.  ***************************************************************************/
  57. int PASCAL WinMain( HANDLE hInstance, HANDLE hPrevInstance, LPSTR lpCmdLine,
  58.     int nCmdShow)
  59.     {
  60.     HANDLE hWnd;
  61.     MSG msg;
  62.  
  63.     if( ! hPrevInstance)
  64.         {
  65.         if( ! InitApplication( hInstance))
  66.             return FALSE;
  67.         }
  68.  
  69.     if( ! (hWnd = InitInstance( hInstance, nCmdShow)) )
  70.         return FALSE;
  71.  
  72.     /* Initialize the database */
  73.     if( ! InitDatabase( hWnd))
  74.         return FALSE;
  75.  
  76.     /* Load the client listbox */
  77.     LoadClientListBox( hWnd);
  78.  
  79.     while( GetMessage( &msg, NULL, NULL, NULL))
  80.         {
  81.         TranslateMessage( &msg);
  82.         DispatchMessage( &msg);
  83.         }
  84.  
  85.     return msg.wParam;
  86.     }
  87.  
  88.  
  89. /***************************************************************************
  90.  * Function : InitApplication
  91.  *
  92.  * Purpose  : This function registers the SAMPLE class.
  93.  *
  94.  * Returns  : RegisterClass return value
  95.  ***************************************************************************/
  96. BOOL InitApplication( HANDLE hInstance)
  97.     {
  98.     WNDCLASS wc;
  99.  
  100.     wc.style            = NULL;
  101.     wc.lpfnWndProc      = WndProc;
  102.     wc.cbClsExtra       = 0;
  103.     wc.cbWndExtra       = DLGWINDOWEXTRA;
  104.     wc.hInstance        = hInstance;
  105.     wc.hIcon            = LoadIcon( NULL, IDI_APPLICATION);
  106.     wc.hCursor          = LoadCursor( NULL, IDC_ARROW);
  107.     wc.hbrBackground    = GetStockObject( WHITE_BRUSH);
  108.     wc.lpszMenuName     = (LPSTR)"SAMPLE";
  109.     wc.lpszClassName    = (LPSTR)szAppName;
  110.  
  111.     return( RegisterClass( &wc));
  112.     }
  113.  
  114.  
  115. /***************************************************************************
  116.  * Function : InitInstance
  117.  *
  118.  * Purpose  : The function initializes the instance creating a main
  119.  *            window.
  120.  *
  121.  * Returns  : >0   - window handle
  122.  *            NULL - window not created
  123.  ***************************************************************************/
  124. HWND InitInstance( HANDLE hInstance, short nCmdShow)
  125.     {
  126.     HWND hWnd;
  127.  
  128.     /* Save the instance handle globally */
  129.     hInst = hInstance;
  130.  
  131.     /* Create the main window */
  132.     hWnd = CreateWindow( szAppName,
  133.         "CDB Sample Program (Client List)",
  134.         WS_OVERLAPPED | WS_BORDER | WS_CAPTION | WS_SYSMENU |
  135.             WS_MINIMIZEBOX | WS_THICKFRAME,
  136.         CW_USEDEFAULT,
  137.         CW_USEDEFAULT,
  138.         CW_USEDEFAULT,
  139.         CW_USEDEFAULT,
  140.         NULL,
  141.         NULL,
  142.         hInstance,
  143.         NULL);
  144.     if( ! hWnd)
  145.         return NULL;
  146.  
  147.     /* Display the window */
  148.     ShowWindow( hWnd, nCmdShow);
  149.     UpdateWindow( hWnd);
  150.  
  151.     return hWnd;
  152.     }
  153.  
  154.  
  155. /***************************************************************************
  156.  * Function : InitDatabase
  157.  *
  158.  * Purpose  : This function opens SAMPLEDB.DBD and retrieves the setup
  159.  *            record.  If no setup record exists, one is created.  Only
  160.  *            one setup record is used in SAMPLE.EXE.
  161.  *
  162.  * Returns  : TRUE  - database initialized
  163.  *            FALSE - database not initialized
  164.  ***************************************************************************/
  165. static BOOL InitDatabase( HWND hParentWnd)
  166.     {
  167.     DWORD dwStatus;
  168.  
  169.     /* Open the sample database.  Use the current directory for database
  170.        file creation and retrieval */
  171.     if( dwStatus = DbOpen( hParentWnd, ".\\", "sampledb.dbd", TRUE, &hDb))
  172.         {
  173.         DbError( hParentWnd, dwStatus, __FILE__, __LINE__);
  174.         return FALSE;
  175.         }
  176.  
  177.     /* Reset focus */
  178.     SendMessage( hParentWnd, WM_SETFOCUS, 0, 0L);
  179.  
  180.     /* Get the setup record.  If it does not exist, create one. */
  181.     dwStatus = XDbRecordGetFirst( hDb, "setup", "lNextClientNbr", &setup,
  182.         sizeof( SETUP));
  183.     if( dwStatus == E_NOTFOUND)
  184.         {
  185.         /* Starting client number is 1000.  Add record. */
  186.         setup.lNextClientNbr = 1000L;
  187.         dwStatus = XDbRecordAdd( hDb, "setup", &setup, sizeof( SETUP));
  188.         }
  189.     if( dwStatus)
  190.         {
  191.         DbError( hParentWnd, dwStatus, __FILE__, __LINE__);
  192.         DbClose( hDb);
  193.         return FALSE;
  194.         }
  195.  
  196.     /* Flush the setup record to disk */
  197.     DbFlush( hDb);
  198.  
  199.     return TRUE;
  200.     }
  201.  
  202.  
  203. /***************************************************************************
  204.  * Function : WndProc
  205.  *
  206.  * Purpose  : This function is the window procedure for SAMPLE.EXE
  207.  *
  208.  * Returns  : 0L - message processed by function
  209.  *            DefWndProc value
  210.  ***************************************************************************/
  211. long FAR PASCAL WndProc( HWND hWnd, unsigned uMessage, WORD wParam,
  212.     LONG lParam)
  213.     {
  214.     HANDLE hMenu;
  215.  
  216.     switch( uMessage)
  217.         {
  218.         case WM_CREATE:
  219.             InitMainWindow( hWnd);
  220.             return 0L;
  221.  
  222.         case WM_SETFOCUS:
  223.             SetFocus( hWndClientLB);
  224.             return 0L;
  225.  
  226.         case WM_COMMAND:
  227.             switch( wParam)
  228.                 {
  229.                 case IDC_CLIENT_LISTBOX:
  230.                     if( HIWORD( lParam) == LBN_DBLCLK)
  231.                         SendMessage( hWnd, WM_COMMAND, IDM_UPDATE, 0L);
  232.                     break;
  233.  
  234.                 case IDM_ADD:
  235.                     AddClientDlg( hWnd);
  236.                     break;
  237.  
  238.                 case IDM_UPDATE:
  239.                     UpdateClientDlg( hWnd);
  240.                     break;
  241.  
  242.                 case IDM_DELETE:
  243.                     DeleteClientDlg( hWnd);
  244.                     break;
  245.  
  246.                 case IDM_SORT_BY_NUMBER:
  247.                     if( bSortByNumber)
  248.                         break;
  249.                     hMenu = GetMenu( hWnd);
  250.                     CheckMenuItem( hMenu, IDM_SORT_BY_NAME, MF_UNCHECKED);
  251.                     CheckMenuItem( hMenu, IDM_SORT_BY_NUMBER, MF_CHECKED);
  252.                     bSortByNumber = TRUE;
  253.                     LoadClientListBox( hWnd);
  254.                     break;
  255.  
  256.                 case IDM_SORT_BY_NAME:
  257.                     if( ! bSortByNumber)
  258.                         break;
  259.                     hMenu = GetMenu( hWnd);
  260.                     CheckMenuItem( hMenu, IDM_SORT_BY_NUMBER, MF_UNCHECKED);
  261.                     CheckMenuItem( hMenu, IDM_SORT_BY_NAME, MF_CHECKED);
  262.                     bSortByNumber = FALSE;
  263.                     LoadClientListBox( hWnd);
  264.                     break;
  265.  
  266.                 case IDM_ABOUT:
  267.                     AboutDlg( hWnd);
  268.                     break;
  269.  
  270.                 c